package org.jeecg.modules.zcgl.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.common.constant.CacheConstant;
import org.jeecg.modules.zcgl.entity.Region;
import org.jeecg.modules.zcgl.vo.RegionIdModel;
import org.jeecg.modules.zcgl.vo.RegionTreeModel;
import org.springframework.cache.annotation.Cacheable;

import java.util.List;
import java.util.Map;

/**
 * @Description: 区域信息
 * @Author: jeecg-boot
 * @Date:   2020-08-11
 * @Version: V1.0
 */
public interface IRegionService extends IService<Region> {
	/**
	 *
	 * 查询我的区域信息,并分节点进行显示
	 * @param par
	 * @return
	 */
	List<RegionTreeModel> queryMyRegionTreeList(Map<String, Object> par);

	@Cacheable(value = CacheConstant.ZCGL_MY_REGION_CACHE + "':'#userId")
	List<Region> queryMyRegionList(String userId);

	List<String> queryMyRegionIdList(String userId);

	List<RegionTreeModel> queryMyRegionTreeList();

	/**
	 * 查询所有区域信息,并分节点进行显示
	 * @return
	 */
	List<RegionTreeModel> queryTreeList();

	/**
	 * 查询所有区域RegionId信息,并分节点进行显示
	 * @return
	 */
	public List<RegionIdModel> queryRegionIdTreeList();

	/**
	 * 保存区域数据
	 * @param region
	 */
	boolean saveRegionData(Region region);

	/**
	 * 更新region数据
	 * @param region
	 * @return
	 */
	Boolean updateRegionDataById(Region region);

	/**
	 * 删除region数据
	 * @param id
	 * @return
	 */
	/* boolean removeRegionDataById(String id); */

	/**
	 * 根据关键字搜索相关的区域数据
	 * @param keyWord
	 * @return
	 */
	List<RegionTreeModel> searhBy(String keyWord,String myRegionSearch,String regionIds);

	/**
	 * 根据区域id删除并删除其可能存在的子级区域
	 * @param id
	 * @return
	 */
	boolean delete(String id);

	/**
	 * 查询Region集合
	 * @param userId
	 * @return
	 */
	public List<Region> queryUserRegions(String userId);

	/**
	 * 根据用户名查询区域
	 *
	 * @param username
	 * @return
	 */
	List<Region> queryRegionsByUsername(String username);

	/**
	 * 根据区域id批量删除并删除其可能存在的子级区域
	 * @param ids
	 * @return
	 */
	boolean deleteBatchWithChildren(List<String> ids);

	/**
	 *  根据区域Id查询,当前和下级所有区域IDS
	 * @param regionId
	 * @return
	 */
	List<String> getSubDepIdsByDepId(String regionId);

	/**
	 * 获取我的区域下级所有区域IDS
	 * @return
	 */
	List<String> getMySubDepIdsByDepId(String regionIds);

}
